/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Clases;
import java.util.ArrayList;
import entidad.Orden;
import entidad.Detalleorden;
import java.util.List;
import restauranteaplicacion.Modificaciones.OrdecCocina;
/**
 *
 * @author a
 */
public class OrdenesCocinaLista {
    
    private int noMesa = 0;
    private int idOrden= 0;
    private String mesero = "";
    private List<Detalleorden> listaDetalle;
    private String mensaje;
    
    public OrdenesCocinaLista()
    {
        listaDetalle = new ArrayList<Detalleorden>();
        mensaje="";
        mesero="";
    }

    /**
     * @return the noMesa
     */
    public int getNoMesa() {
        return noMesa;
    }

    /**
     * @param noMesa the noMesa to set
     */
    public void setNoMesa(int noMesa) {
        this.noMesa = noMesa;
    }

    /**
     * @return the idOrden
     */
    public int getIdOrden() {
        return idOrden;
    }

    /**
     * @param idOrden the idOrden to set
     */
    public void setIdOrden(int idOrden) {
        this.idOrden = idOrden;
    }
    
    public void setMesero(String Mesero) {
        this.mesero = Mesero;
    }

    /**
     * @return the listaDetalle
     */
    public List<Detalleorden> getListaDetalle() {
        return listaDetalle;
    }
    
    public void setComanda(String men)
    {
        this.mensaje = men;
    }
    public String getComanda()
    {
        return( "<html><div><font color='green'>No Mesa"+ String.valueOf(this.noMesa)+ " Mesero "+this.mesero
                +" </font></br></div>"
                +mensaje
                +"</html>");
    }

    /**
     * @param listaDetalle the listaDetalle to set
     */
    public void setListaDetalle(List<Detalleorden> listaDetalle) {
        if(listaDetalle.size()>0)
        {
            //this.listaDetalle.addAll(listaDetalle.subList(0, listaDetalle.size()-1));
            for(Detalleorden temp : listaDetalle)
            {
                if(temp.getPlatosidPlatos()!=null && temp.getActivo() ==true)
                    mensaje= mensaje + "<div>"+String.valueOf(temp.getCantidad())+"  "+
                            temp.getPlatosidPlatos().getNombre()+ "  "+
                            temp.getDescripcion()+"  </br><div>";
                this.listaDetalle.add(temp);
            }
        }
    }
    
    public void setListaDetlleSinMesaje(List<Detalleorden> listaDetalle)
    {
        this.listaDetalle = listaDetalle;
    }
    private static boolean compararDetalle(Detalleorden temp1, Detalleorden temp2)
    {
        if(temp1.equals(temp2)&&
                temp1.getActivo() == temp2.getActivo() &&
                temp1.getCantidad()== temp2.getCantidad()&&
                temp1.getDescripcion().equals(temp2.getDescripcion())&&
                temp1.getPlatosidPlatos().getIdPlatos() == temp2.getPlatosidPlatos().getIdPlatos())
            return true;
        return false;
    }
    
    private static boolean compararOrdenes(Orden orden1, OrdenesCocinaLista cocina)
    {
        for(Detalleorden temp : orden1.getDetalleordenCollection())
        {
            boolean respuesta = true;
            if(temp.getPlatosidPlatos()!=null)
            for(Detalleorden temp2 : cocina.getListaDetalle())
            {
                if(temp.equals(temp2) && temp2.getPlatosidPlatos()!=null)
                {
                    respuesta=false;
                    if(!compararDetalle(temp, temp2))
                        return false;
                }                
            }
            if(respuesta)
                return false;
        }
        for(Detalleorden temp2 : cocina.getListaDetalle())
        {
            boolean respuesta = true;
            for(Detalleorden temp : orden1.getDetalleordenCollection())
            {
                if(temp.equals(temp2))
                    respuesta=false;                    
            }
            if(respuesta)
                return false;
        }
        return true;
    }
    
    
    
    public static boolean agregarOrdenes(List<Orden> listaOrdenes, List<OrdenesCocinaLista> cocinaLista)
    {
        boolean varVerificarCambios = false;
        try{
            
            for(Orden temp : listaOrdenes)
            {
                boolean bandera = true;
                if(!cocinaLista.isEmpty())
                    for(OrdenesCocinaLista cocina : cocinaLista)
                        if(temp.getIdOrden() == cocina.getIdOrden())
                        {
                            bandera = false;
                            if(!compararOrdenes(temp, cocina))
                            {
                                varVerificarCambios=true;
                                arreglarDetalles(temp, cocina);
                            }
                        }
                if(bandera)
                {
                    varVerificarCambios=true;
                    OrdenesCocinaLista tempCocina = new OrdenesCocinaLista();
                    tempCocina.setIdOrden(temp.getIdOrden());
                    tempCocina.setNoMesa(temp.getMesaidMesa().getNumeroMesa());
                    tempCocina.setListaDetalle((List<Detalleorden>) temp.getDetalleordenCollection());
                    tempCocina.setMesero(temp.getUsuarioidUsuario().getUserName());
                    //if(OrdecCocina.numeroSalida != -1)
                    //    return false;
                    cocinaLista.add(tempCocina);
                }
            }
        }
        catch(Exception e)
        {}
        return varVerificarCambios;
    }
    
    private static void arreglarDetalles(Orden orden1, OrdenesCocinaLista cocina)
    {
        //Agregar todos los Detalles y sus cambios
        String men="";
        boolean bandera;
        for(Detalleorden temp : orden1.getDetalleordenCollection())
        {
            bandera = true;
            for(Detalleorden temp2 : cocina.getListaDetalle())
            {
                if(temp.getPlatosidPlatos()!=null && temp2.getPlatosidPlatos()!=null)
                {
                    if(temp.equals(temp2) && temp.getActivo() ==true)
                        if(compararDetalle(temp, temp2))
                        {
                            bandera=false;
                            men= men + "<div>"+String.valueOf(temp.getCantidad())+"  "+
                                temp.getPlatosidPlatos().getNombre()+ "  "+
                                temp.getDescripcion()+"  </br><div>";
                        }                    
                }
            }
            if(bandera && temp.getPlatosidPlatos()!=null && temp.getActivo() ==true)
                men= men + "<div><font color='green'>"+String.valueOf(temp.getCantidad())+"  "+
                        temp.getPlatosidPlatos().getNombre()+ "  "+
                        temp.getDescripcion()+"  </font></br><div>";
        }
        cocina.setComanda(men);
        cocina.setListaDetlleSinMesaje((List<Detalleorden>) orden1.getDetalleordenCollection());
    }   
    
    
}
